package com.getan.boot.common.utils;

import com.getan.boot.common.utils.token.GenericTokenParser;
import com.getan.boot.common.utils.token.MapTokenHandler;
import com.getan.boot.common.utils.token.TokenHandler;

import java.util.Map;
import java.util.UUID;

/**
 * 字符串操作工具类
 *
 * @author Bruce.Gong
 * @since 1.0.0-SNAPSHOT
 */
@SuppressWarnings("unused")
public class StringUtils extends org.apache.commons.lang3.StringUtils {

    /**
     * 替换占位符
     *
     * @param content           带有占位符的文本内容
     * @param placeholderStart  占位符开始
     * @param placeholderEnd    占位符结束
     * @param placeholderValues 点位符对应的值
     * @return 替换后的字符串
     */
    public static String replacePlaceholder(String content, String placeholderStart, String placeholderEnd, Map<String, String> placeholderValues) {
        if (isEmpty(content) || CollectionUtils.isEmpty(placeholderValues)) {
            return content;
        }
        return new GenericTokenParser(placeholderStart, placeholderEnd, new MapTokenHandler(placeholderValues)).parse(content);
    }

    /**
     * 替换占位符，默认使用 {@code ${}} 作为占位符
     *
     * @param content           带有占位符的文本内容
     * @param placeholderValues 点位符对应的值
     * @return 替换后的字符串
     */
    public static String replacePlaceholder(String content, Map<String, String> placeholderValues) {
        return replacePlaceholder(content, StringPool.DOLLAR_LEFT_BRACE, StringPool.RIGHT_BRACE, placeholderValues);
    }

    /**
     * 替换占位符，默认使用 {@code ${}} 作为占位符
     *
     * @param content         带有占位符的文本内容
     * @param replaceFunction 替换方法
     * @return 替换后的字符串
     */
    public static String replacePlaceholder(String content, TokenHandler replaceFunction) {
        return new GenericTokenParser(StringPool.DOLLAR_LEFT_BRACE, StringPool.RIGHT_BRACE, replaceFunction).parse(content);
    }

    /**
     * UUID
     *
     * @return UUID
     */
    public static String uuid() {
        return UUID.randomUUID().toString().replace(StringPool.DASH, StringPool.EMPTY);
    }

}
